package com.flyqiu.form.api.store;


import com.flyqiu.form.common.FlyQiuFormConstant;
import com.flyqiu.form.model.FlyQiuTableConfigModel;
import com.flyqiu.form.model.SqlColumnModel;
import com.flyqiu.form.model.entity.FlyQiuTableConfig;

import java.util.List;

public interface BaseTableInfo extends FlyQiuFormConstant.FormBaseColumns {
    /**
     * 获取表配置
     *
     * @param tableId 表id
     * @return {@link FlyQiuTableConfigModel}
     */
    default FlyQiuTableConfigModel getTableConfigModel(String tableId) {
        return getTableConfigModel(tableId, false);
    }

    /**
     * 获取表配置
     *
     * @param tableId       表id
     * @param loadSqlColumn 是否加载sql列信息
     * @return FlyQiuTableConfigModel
     */
    FlyQiuTableConfigModel getTableConfigModel(String tableId, boolean loadSqlColumn);

    /**
     * 获取表配置
     *
     * @param config        表配置
     * @param loadSqlColumn 是否加载sql列信息
     * @return FlyQiuTableConfigModel
     */
    FlyQiuTableConfigModel getTableConfigModel(FlyQiuTableConfig config, boolean loadSqlColumn);

    /**
     * 根据数据表id获取数据表列信息（数据库中的）
     *
     * @param tableId 数据表id
     * @return 列信息集合
     */
    default List<SqlColumnModel> getStorageColumnConfig(String tableId) {
        return getStorageColumnConfig(getTableConfigModel(tableId));
    }

    /**
     * 根据数据表配置 获取数据表列信息（数据库中的）
     *
     * @param config 数据表信息
     * @return 列信息集合
     */
    List<SqlColumnModel> getStorageColumnConfig(FlyQiuTableConfig config);
}
